package dbservlet;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

//xml解析
public class Utils {
	public static  ArrayList<HashMap<String,String>> praseDatabasesXML(String filePath) throws IOException{
        try {
        	//创建DocumentBuilderFactory实例,指定DocumentBuilder
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            //调用工程的方法 得到dom解析器对象
            DocumentBuilder builder = dbf.newDocumentBuilder();
            // DOM 解析器解析xml文档(传入资源路径)
            Document doc = builder.parse(filePath);
            Element root = (Element) doc.getDocumentElement();
            NodeList dbsNodes = root.getChildNodes();
            ArrayList<HashMap<String,String>> result = new ArrayList<HashMap<String,String>>();
            for (int i = 0; i < dbsNodes.getLength(); i++) {
            	if (dbsNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {
            		NodeList dbConfigItems = dbsNodes.item(i).getChildNodes();
                    HashMap<String,String> dbItem = new HashMap<String,String>();
                    for(int j = 0; j < dbConfigItems.getLength(); j++) {
                    	Node configItem = dbConfigItems.item(j);
                    	if (configItem.getNodeType() == Node.ELEMENT_NODE) {
                        	dbItem.put(configItem.getNodeName(), configItem.getTextContent());
                        }
                    }
                    result.add(dbItem);
                }
            }
            return result;
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("utils返回了null");
        return null;
	}
	//在xml中根据传来的数据查找对应数据库中的列名(String)，没有返回null
	public static String getColName(ArrayList<HashMap<String,String>> data, String localName){
		for(int i = 0; i < data.size(); i++) {
			if(data.get(i).get("localName").equals(localName)) {
				return data.get(i).get("columnName");
			}
		}
		return null;
	}
	//在xml中根据传来的数据查找对应数据库中的数据类型，并根据是不是String来决定给数据包装'符号与否
	//如果是String, 会给传来的数据包装'符号, 否则返回原数据
	//例如：zhangsan (String) -> 返回：'zhangsan'
	//这个功能是为了方便SQL语句的填写
	public static String getTypedVar(ArrayList<HashMap<String,String>> data, String localName, String var){
		for(int i = 0; i < data.size(); i++) {
			if(data.get(i).get("localName").equals(localName)) {
				if(data.get(i).get("datatype").equals("String")) {
					return "'" + var + "'";
				}
				return var;
			}
		}
		return null;
	}
}
















